//
//  ViewController.m
//  fmdatabase
//
//  Created by honey on 16/4/28.
//  Copyright © 2016年 honey. All rights reserved.
//

#import "ViewController.h"

#import "FMDatabase.h"

@interface ViewController ()
{
    FMDatabase *_dataBase; //数据库操作对象,用来执行数据库的各种操作
}

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
//    ------------------------------------数据库常用的四个步骤------------------------------
//    数据库是用来存储本地文件
//1.创建数据库
    //iOS的数据库一般会保存在沙盒文件的Documents中(Documents, Library, tmp, xxx.app)
    //NSString *home = NSHomeDirectory();
    
    //在用户家目录搜索Documents目录
    NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory/*查找Documents目录*/, NSUserDomainMask/*在用户家目录查找*/, YES/*是否返回完整路径*/);
    //取出documents目录
    NSString *documentsPath = [documents firstObject];
    //将数据库文件名拼接到documents目录下
    NSString *dbPath = [documentsPath stringByAppendingString:@"/test.db"];
    
    //创建FMDatabase对象,并且设置数据库路径
    _dataBase = [FMDatabase databaseWithPath:dbPath];
    
    //打开数据库,如果数据库不存在,则创建并且打开
    if ([_dataBase open])
    {
        NSLog(@"打开成功");
    }
    else
    {
        NSLog(@"打开失败");
    }
    
    NSLog(@"%@", dbPath);
    
//2.创建表
    NSString *createTableSql = @"create table if not exists Person(id integer primary key autoincrement, name text, age integer)";
    //fmdb对数据库操作分为update, query
    BOOL success = [_dataBase executeUpdate:createTableSql];
    if (success)
    {
        NSLog(@"创建表成功");
    }
    else
    {
        NSLog(@"创建表失败");
    }
    
//3.增删改查
    [self insert];
    [self update];
    [self delete];
    [self select];
    
//4.关闭数据库,关闭后不能再对数据库进行操作,如果需要,则需再次打开数据库[_database open]
    [_dataBase close];
}

//插入
- (void)insert
{
    //sql注入（避免黑客攻击，一般不采用字符串拼接）
    NSString *insertSQL = @"insert into Person (name, age) values (?, ?)";
    /*executeUpdate: 第一个参数为要执行的sql语句
                     第二个参数以后为sql语句中 ? 所对的内容,并且每个参数都必须是对象*/
    BOOL success = [_dataBase executeUpdate:insertSQL, @"张三", @(18)];
    if (success)
    {
        NSLog(@"插入成功");
    }
    else
    {
        NSLog(@"插入失败");
    }
}
//更新（改）
- (void)update
{
    NSString *updateSQL = @"update Person set name=?, age=? where id=?";
    BOOL success = [_dataBase executeUpdate:updateSQL, @"王五", @(20), @(1)];
    if (success)
    {
        NSLog(@"更新成功");
    }
    else
    {
        NSLog(@"更新失败");
    }
}
//删除
- (void)delete
{
    NSString *deleteSQL = @"delete from Person where id=?";
    BOOL success = [_dataBase executeUpdate:deleteSQL, @(5)];
    if (success)
    {
        NSLog(@"删除成功");
    }
    else
    {
        NSLog(@"删除失败");
    }
}
//查询
- (void)select
{
    NSString *selectSQL = @"select name,id,age from Person";
    //查询返回的为一个结果集
    //NSArray
    //NSDictionary
    //NSSet
    FMResultSet *set = [_dataBase executeQuery:selectSQL];
    //需要对结果集进行遍历操作
    while ([set next])//获取下一条记录,如果没有下一条,返回NO
    {
        //取数据
        NSString *name = [set stringForColumn:@"name"]; //按照字段名字获取数据
        NSInteger ID   = [set intForColumn:@"id"];
        NSInteger age  = [set intForColumnIndex:2]; //根据列的编号取数据,编号从0开始,顺序根据查询语句的不同而不同
        NSLog(@"age = %ld, name = %@, ID = %ld", age, name, ID);
    } 
}
@end










